****************************************************************************
*
* WARNING : please consider following remarks before usage
*
* 1) All models are a tradeoff between accuracy and complexity (ie. simulation
*    time).
*
* 2) Macromodels are not a substitute to breadboarding, they rather confirm the
*    validity of a design approach and help to select surrounding component values.
*
* 3) A macromodel emulates the NOMINAL performance of a TYPICAL device within
*    SPECIFIED OPERATING CONDITIONS (ie. temperature, supply voltage, etc.).
*    Thus the macromodel is often not as exhaustive as the datasheet, its goal
*    is to illustrate the main parameters of the product.
*
* 4) Data issued from macromodels used outside of its specified conditions
*    (Vcc, Temperature, etc) or even worse: outside of the device operating
*    conditions (Vcc, Vicm, etc) are not reliable in any way.
*
****************************************************************************
****
***  TSX9291  Spice macromodel subckt 
***
***    February 2014
****                      
************ CONNECTIONS: 
****                NON-INVERTING INPUT
****                   |  INVERTING INPUT
****                   |    |   POSITIVE POWER SUPPLY
****                   |    |       |   NEGATIVE POWER SUPPLY
****                   |    |       |       |  OUTPUT  
****                   |    |       |       |       |     
****                   |    |       |       |       |  
.SUBCKT TSX9291  VP  VM   VCCP  VCCN  VS
    LOUT VZOUT 0 {LOUT}
    FIOUT 0 VZOUT VREADIO 1.0
    G_ICC VCCP VCCN POLY(1) VCCP VCCN 0.002348418972332015
+1.4525691699604747E-4 -7.509881422924904E-6
    G_IIB_VM VREF VM VALUE={10p}
    GM1 VREF VB VOUT_DIFF__SR_VCC 0 {1/RD}
    G_ICCSAT_OUTHIGH VCCP VCCN VALUE={IF(I(V_OUTVLIM_HIGH)>1u ,
+V(Icc_out_high), 0)}
    G_IIB_VP VREF VP VALUE={10p}
    G_IOUT_SINKED VCCN 0 VALUE={IF(I(VreadIo)>0, 0, I(VreadIo))}
    G_I_IO VB_2 VREF VALUE={V(VB_Vref)*GB*( 3*( 1 -
+exp(-abs(V(v_Io_val))/10m )) )  }
    G_IOUT_SOURCED VCCP 0 VALUE={IF(I(VreadIo)>0, I(VreadIo),0)}
    G_ICCSAT_OUTLOW VCCP VCCN VALUE={IF(I(V_OUTVLIM_LOW)>1u ,
+V(Icc_out_low) , 0)}
    G_I_VB VB_2 VREF VB_VREF 0 {GB}
    RIN_CM_VP VREF VP {RIN_CM_VP}
    RIN_CM_VM VREF VM {RIN_CM_VM}
    RIN_DIFF VP VM {RIN_DIFF}
    RPROT_IN_P_VCCP NET403 VCCP 100
    RO2_1 VB_2 VREF {RO2_1}
    RPROT_IN_M_VCCP VCCP NET241 100
    RD1 VCCP_ENHANCED VO_DIFF_PLUS {RD}
    RZOUT_IOUT_COEFF VZOUT_IOUT_COEFF NET0285 50
    RD2 VCCP_ENHANCED VO_DIFF_MINUS {RD}
    ROUT NET0254 VZOUT {ROUT}
    R1_REF NET271 NET235 1Meg
    R_ICCSAT_HIGH ICC_OUT_HIGH 0 1K
    R2_REF NET235 NET229 1Meg
    RPROT_IN_M_VCCN VCCN NET231 15K
    RPROT_IN_P_VCCN NET388 VCCN 15K
    R_ICCSAT_LOW ICC_OUT_LOW 0 1K
    RO2_2 VB_3 VB_2 {RO2_2}
    E_VOL_NORL VOL_NORL 0 VALUE={0}
    E60 NET0296 0 VALUE={V(Vref) - alpha_desat_time*V(Vccp,Vccn) } 
    E64 VOH_NORL 0 VALUE={0}
    EVLIM_HIGH_VOUT NET390 0 VALUE={V(VCCP) - V(Ro1_Voh)*I(VreadIo) -
+V(VOH_noRL)}
    E_READIO V_IO_VAL 0 VALUE={I(VreadIo)}
    EZOUT_VCC_COEFF VZOUT_VCC_COEFF 0 VALUE={1}
    EILIM_SINK VB_3_SINK VDEP_SINK VB_3 0 1.0
    E_ICCSAT_HIGH ICC_OUT_HIGH 0 VALUE={0}
    E_VDEP_SOURCE_3 VDEP_SOURCE 0 VALUE={IF( V(Vccp,Vccn)<VCC_MIN , 0 ,
+V(val_vdep_source_filtered))}
    EMEAS_VB_VREF VB_VREF 0 VB VREF 1.0
    E2_REF NET229 0 VCCN 0 1.0
    EVLIM_LOW_VOUT NET393 0 VALUE={V(VCCN) - V(Ro1_Vol)*I(VreadIo) +
+V(VOL_noRL) }
    E_VDEP_SOURCE_2 VAL_VDEP_SOURCE_FILTERED 0
+VALUE={IF(V(val_vdep_source)>=0, 0, V(val_vdep_source))}
    E_VDEP_SINK_3 VDEP_SINK 0 VALUE={IF( V(Vccp,Vccn)<VCC_MIN , 0 ,
+V(val_vdep_sink_filtered))}
    E4 RO1_VOL 0 POLY(1) VCCP VCCN 52.31620553359682 -3.718050065876152
+0.16864295125164686
    E_VDEP_SOURCE_1 VAL_VDEP_SOURCE 0 VALUE={ ( -388.1284584980241 +
+133.78129117259556*V(Vccp,Vccn) -5.401844532279315*PWR(V(Vccp,Vccn),2) ) 
+-5000*I(VreadIo)}
    E1_REF NET271 0 VCCP 0 1.0
    E_R1 NET295 VREF VALUE={I(VreadI_R1)*( R1_sink
++(R1_source-R1_sink)*1/(1+exp(-alpha_switch*(V(v_Io_val)-Io_val_switch) )
+)) }
    EZOUT VB_3 NET0207
+VALUE={V(VZout)*V(VZout_Iout_coeff)*V(VZout_Vcc_coeff)}
    E_VDEP_SINK_1 VAL_VDEP_SINK 0 VALUE={ ( 171.84387351778656
+-75.135046113307*V(Vccp,Vccn) + 3.050065876152833*PWR(V(Vccp,Vccn),2) )
+-5000*I(VreadIo)}
    E_VDEP_SINK_2 VAL_VDEP_SINK_FILTERED 0
+VALUE={IF(V(val_vdep_sink)<=0 , 0 , V(val_vdep_sink))}
    E_RO1_VOH RO1_VOH 0 POLY(1) VCCP VCCN 57.50988142292495
+-3.789064558629788 0.24914361001317642 -0.005533596837944699
    EZOUT_IOUT_COEFF NET0285 0 VALUE={IF( I(VreadIo)>=0 , (
+Zout_Iout_coeff_MIN + (1.0 -
+Zout_Iout_coeff_MIN)*exp(-abs(I(VreadIo)/Iout_dc_tau__source)) ) , (
+Zout_Iout_coeff_MIN + (1.0 -
+Zout_Iout_coeff_MIN)*exp(-abs(I(VreadIo)/Iout_dc_tau__sink)) ) )}
    E_VREF VREF 0 NET235 0 1.0
    E62 NET0443 0 VALUE={V(Vref) + alpha_desat_time*V(Vccp,Vccn) }
    EMEAS_VOUT_DIFF VOUT_DIFF 0 VO_DIFF_PLUS VO_DIFF_MINUS 1.0
    EILIM_SOURCE VB_3_SOURCE VDEP_SOURCE VB_3 0 1.0
    E_ICCSAT_LOW ICC_OUT_LOW 0 VALUE={0}
    E_SR_VCC_MODULATION VOUT_DIFF__SR_VCC 0 VOUT_DIFF 0 1
    COUT NET0254 0 {COUT}
    CZOUT_IOUT_COEFF VZOUT_IOUT_COEFF 0 1n
    CIN_DIFF VM VP {CIN_DIFF}
    CIN_CM_VM VM VREF {CIN_CM_VM}
    COUT2 VZOUT 0 {COUT2}
    CIN_CM_VP VP VREF {CIN_CM_VP}
    CCOMP VB VB_2 {CCOMP}
    CDIFF_PARASITIC VO_DIFF_PLUS VO_DIFF_MINUS 3.3p
    C_RO2_1 VB_2 VREF 10f
    D29 NET0441 VB DIODE_NOVd
    DILIM_SINK VB_3_SINK VB_3 DIODE_ILIM
    D28 VB NET0425 DIODE_NOVd
    D_OUTVLIM_HIGH VB_3 NET364 DIODE_NOVd
    DPROT_IN_P_VCCN NET387 NET405 DIODE_VLIM
    DPROT_IN_M_VCCP VM NET380 DIODE_VLIM
    DILIM_SOURCE VB_3 VB_3_SOURCE DIODE_ILIM
    DPROT_IN_P_VCCP NET405 NET370 DIODE_VLIM
    DPROT_IN_M_VCCN NET391 VM DIODE_VLIM
    D_OUTVLIM_LOW NET394 VB_3 DIODE_NOVd
    V57 NET0296 NET0441 DC {VD_COMPENSAZIONE}
    V56 NET0425 NET0443 DC {VD_COMPENSAZIONE}
    VPROT_IN_P_VCCN NET387 NET388 DC {V_DPROT}
    VREADI_R1 VB NET295 DC 0
    VPROT_IN_P_VCCP NET403 NET370 DC {V_DPROT}
    VOS NET405 VP DC 0
    V_OUTVLIM_HIGH NET364 NET390 DC {VD_COMPENSAZIONE}
    VPROT_IN_M_VCCP NET241 NET380 DC {V_DPROT}
    V_ENHANCE_VCCN VCCN_ENHANCED VCCN DC {VCCN_ENHANCE}
    V_ENHANCE_VCCP VCCP_ENHANCED VCCP DC {VCCP_ENHANCE}
    VREADIO NET0207 VS DC 0
    VPROT_IN_M_VCCN NET391 NET231 DC {V_DPROT}
    V_OUTVLIM_LOW NET393 NET394 DC {VD_COMPENSAZIONE}
    IEE_N VEE_N VCCN_ENHANCED DC {IEE}
    M_NMOS2 VO_DIFF_MINUS VM VEE_N VCCN_ENHANCED MOS_N L={L} W={W}
    M_NMOS1 VO_DIFF_PLUS NET405 VEE_N VCCN_ENHANCED MOS_N L={L} W={W}
    
*******************************************************************************
*
* MODELS/SUBCKTS and PARAMS used by TSX9291 subckt:
*
.PARAM VCC_MIN=4.0
.PARAM RINCM=1T
.PARAM CINCM=8E-12 
.PARAM RIN_CM_VM={2*RINCM}
.PARAM RIN_CM_VP={2*RINCM}
.PARAM CIN_CM_VM={CINCM/2}
.PARAM CIN_CM_VP={CINCM/2}
.PARAM RIN_DIFF=1T
.PARAM CIN_DIFF=10f
.PARAM RD=1k
.PARAM VCCP_enhance=150m
.PARAM VCCN_enhance=-1100m 
.PARAM GB=3m
.PARAM Ro = 3.3658E+04
.PARAM A0_source = 2e+7  
.PARAM A0_sink = 1.5e+6
.PARAM alpha_switch = 1e6
.PARAM Io_val_switch = -7u
.PARAM Ccomp=1.79p 
.PARAM IEE=50u
.PARAM W=1.41u
.PARAM L=1u
.PARAM gm_mos=1.8779E-04
.PARAM Lout  = 0.8u
.PARAM Rout  = 350
.PARAM Cout  = 3n
.PARAM Cout2 = 7p
.PARAM Zout_Iout_coeff_MIN= 1.0
.PARAM Iout_dc_tau__source = 0.21m 
.PARAM Iout_dc_tau__sink   = 0.03m 
.PARAM alpha_desat_time = 0.5
.PARAM Ro2_2=1e-3
.PARAM Ro2_1={ Ro - Ro2_2 } 
.PARAM R1_sink={A0_sink/(gm_mos*GB*Ro2_1)}
.PARAM R1_source={A0_source/(gm_mos*GB*Ro2_1)}
.PARAM V_DPROT=150m
.PARAM Vd_compensazione=-788.4u

.MODEL MOS_N  NMOS LEVEL=1  VTO=+0.65  KP=500E-6 
.MODEL DIODE_NOVd D LEVEL=1  IS=10E-15 N=0.001
.MODEL DIODE_VLIM D LEVEL=1  IS=0.8E-15   
.MODEL DIODE_ILIM D LEVEL=1  IS=0.8E-15 
*
*******************************************************************************

.ENDS
*** End of subcircuit definition.